dice | 您所在的位置:网站首页 › catan 攻略 › dice |
题目地址:dice_game 从这篇开始就正式进入高手进阶区,一些简单的知识点我这里就不会再重复赘述了,请有需要的同学看前面的章节。 废话不多,看看题目 题目没什么提示,只是知道这个题目的来源是:XCTF 4th-QCTF-2018 下载附件,看看情况,照例做下保护机制检查 root@mypwn:/ctf/work/python/dice_game# checksec dice_game [*] '/ctf/work/python/dice_game/dice_game' Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: PIE enabled打开了各种限制条件,作为难度为1的题目,感觉有点吓唬人哩! 没事,先做下反编译 高手进阶区的题目,我会先对反编译之后的c语言代码做下命名修改,方便同学们可以快速理解,要不然v1、v2这种变量函数命名对于复杂题目的快速判断会造成不小的干扰。 下面我就直接把我已经修改好命名的c语言代码贴出来,这个程序主要有三个函数,我按照函数的意义进行了重命名,分别是main, go_game, get_flag。 先看下main函数: __int64 __fastcall main(__int64 a1, char **a2, char **a3) { char szName[55]; // [rsp+0h] [rbp-50h] char nResultGame; // [rsp+37h] [rbp-19h] ssize_t nLenName; // [rsp+38h] [rbp-18h] unsigned int seed[2]; // [rsp+40h] [rbp-10h] unsigned int nRound; // [rsp+4Ch] [rbp-4h] memset(szName, 0, 0x30uLL); *(_QWORD *)seed = time(0LL); printf("Welcome, let me know your name: ", a2); fflush(stdout); nLenName = read(0, szName, 0x50uLL); if ( nLenName 0 && nInputPoint |
CopyRight 2018-2019 实验室设备网 版权所有 |